home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / joystick.arc / JOYSTICK.ASM next >
Assembly Source File  |  1980-01-01  |  5KB  |  225 lines

  1.         ;Joystick Display
  2.         ;Display Joystick Coordinates on Screen in Hex
  3.         ;Mark Hansen 2/86
  4.  
  5.  
  6.         Port     equ  201h
  7.         Doscall     equ     21h
  8.         video    equ    10h
  9.         count    equ    26d
  10.         count1    equ    43d
  11.         count2    equ    31d
  12.         count3    equ    16d
  13.  
  14. ;***********************************************************
  15.  
  16.     stackhere segment    stack    ;define stack segment
  17.             db    20    dup     ('stack   ')
  18.  
  19.  
  20.  
  21.         stackhere ends
  22.  
  23. ;***********************************************************
  24.  
  25. data segment        ;Define segment
  26.         
  27.  
  28.         Xcoordinate    dw    ?    ;place to store x coord
  29.         Ycoordinate    dw    ?    ;place to store y coord
  30.         
  31.         ;Strings to be printed
  32.  
  33. header    db    'Xcoordinate    Ycoordinate'
  34.  
  35. blab        db    'Use bits of this program as a sub-procedure'
  36. blab1    db    'of another program if you like.'
  37. blab2    db    'Mark Hansen 2/86'
  38.  
  39.  
  40.         data  ends
  41.  
  42. ;***********************************************************
  43.  
  44.         code    segment    ;define code segment
  45.  
  46. ;-----------------------------------------------------------
  47.  
  48.     main    proc    far        ;main part of prognam
  49.  
  50.             assume    cs:code,ds:data
  51.  
  52.         start:    ;starting execution address
  53.  
  54.     ;set up stack for return
  55.         push ds    ;save old data segment
  56.         sub ax,ax    ;put zero an ax
  57.         push ax    ;save it on stack
  58.  
  59.     ;set ds register to current data segment
  60.         mov ax,data    ;datarea segment addr
  61.         mov ds,ax        ;into ds register
  62.  
  63.         mov    ah,6        ;clear screen using
  64.         mov    al,0        ;scroll up function
  65.         mov     ch,0        ;upper left row
  66.         mov     cl,0        ;upper left column
  67.         mov    dh,24d    ;lower right row
  68.         mov    dl,79d    ;lower right column
  69.         mov    bh,7        ;blank line attribute
  70.         int    video    
  71.  
  72.  
  73.  
  74.  
  75.  
  76. ;        Print Coordinate String
  77. ;---------------------------------------------
  78.         mov    bx,0
  79.         mov    ah,2h
  80.         mov    dh,1h    ;move cursor to row 1 
  81.         mov    dl,0h    ;column 0
  82.         int    video    ;through BIOS
  83.  
  84.         mov    cx,count    ;put # of chars on screen
  85.         mov    bx,offset    header    ;address of string
  86.  
  87. nextcharacter:
  88.         mov    dl,[bx]    ;put 1 char in DL
  89.         mov    ah,2        ;Display character function
  90.         int    doscall    ;call DOS
  91.         inc    bx        ;advance the pointer
  92.         loop    nextcharacter    ;go back for another
  93.  
  94. ;        Print Blab
  95. ;--------------------------------------------------
  96.  
  97.         mov    bx,0        ;page 0
  98.         mov    ah,2h
  99.         mov    dh,7d    ;move cursor to row 7 
  100.         mov    dl,30d    ;column 30
  101.         int    video    ;through BIOS
  102.  
  103.         mov    cx,count1    ;put # of chars on screen
  104.         mov    bx,offset    blab        ;address of string
  105.  
  106. morebs:
  107.         mov    dl,[bx]    ;put 1 char in DL
  108.         mov    ah,2        ;Display character function
  109.         int    doscall    ;call DOS
  110.         inc    bx        ;advance the pointer
  111.         loop    morebs    ;go back for another
  112.  
  113.         mov    bx,0        ;page 0
  114.         mov    ah,2h
  115.         mov    dh,8d    ;move cursor to row 8 
  116.         mov    dl,30d    ;column 30
  117.         int    video    ;through BIOS
  118.  
  119.         mov    cx,count2    ;put # of chars on screen
  120.         mov    bx,offset    blab1    ;address of string
  121.  
  122. morebs1:
  123.         mov    dl,[bx]    ;put 1 char in DL
  124.         mov    ah,2        ;Display character function
  125.         int    doscall    ;call DOS
  126.         inc    bx        ;advance the pointer
  127.         loop    morebs1    ;go back for another
  128.  
  129.         mov    bx,0        ;page 0
  130.         mov    ah,2h
  131.         mov    dh,9d    ;move cursor to row 9 
  132.         mov    dl,30d    ;column 30
  133.         int    video    ;through BIOS
  134.  
  135.         mov    cx,count3    ;put # of chars on screen
  136.         mov    bx,offset    blab2    ;address of string
  137.  
  138. morebs2:
  139.         mov    dl,[bx]    ;put 1 char in DL
  140.         mov    ah,2        ;Display character function
  141.         int    doscall    ;call DOS
  142.         inc    bx        ;advance the pointer
  143.         loop    morebs2    ;go back for another
  144. doit:
  145.  
  146.     ;Main
  147.         mov    bx,0        ;page 0
  148.         mov    ah,2h
  149.         mov    dh,4h    ;move cursor to row 4 
  150.         mov    dl,0        ;column 0
  151.         int    video    ;through BIOS
  152.  
  153. redo:    mov     dx,port    ;move address of port in dx
  154.         mov    bx,0        ;bx to zero
  155.         out    dx,al    ;initalize timer on game card
  156. inputx:    in    al,dx    ;input port to al
  157.         inc     bx        ;add 1 to x coordinate
  158.         and    al,01h    ;mask off all but bit 0
  159.         cmp     al,0        ;see if zero yet
  160.         jnz     inputx    ;jump back, try again
  161.     mov xcoordinate,bx    ;store x coordinate
  162.         call print    ;output to screen
  163.         sub     bx,bx    ;bx to zero
  164.  
  165.  
  166.         mov    ah,2h
  167.         mov    dh,4h    ;move cursor to row 4 
  168.         mov    dl,10h    ;column 16
  169.         int    video    ;through BIOS
  170.  
  171.         mov    dx,port    ;port adress
  172.         out     dx,al    ;initialize timer
  173. inputy:    in    al,dx    ;input port to al
  174.         inc    bx        ;add 1 to y coordinate
  175.         and     al,02h    ;mask off all but bit 1
  176.         cmp    al,0        ;see if zero yet
  177.         jnz    inputy    ;if not, continue to check
  178.     mov    ycoordinate,bx    ;store y coordinate
  179.  
  180.         call print    ;output to screen
  181.  
  182.  
  183.         jmp     doit
  184.         ret            ;return to dos
  185.  
  186.         
  187.     main    endp        ;end of main part of program
  188.  
  189. ;----------------------------------------------------------
  190.  
  191.     print    proc        near        ;define subprocedure
  192.  
  193.         mov    ch,4        ;number of digits
  194. rotate:    mov    cl,4        ;set count to four bits
  195.         rol    bx,cl    ;left digit to right
  196.         mov     al,bl    ;mov to al
  197.         and     al,0fh    ,mask off left digit
  198.         add    al,30h    ;convert hex to ascii
  199.         cmp    al,3ah    ;is it greater then 9 
  200.         jl     printmore    ;jump if 0 to 9
  201.         add     al,7h    ;digit is A to F
  202.         
  203.     printmore:
  204.         
  205.         mov     dl,al    ;put ascii character in dl
  206.         mov     ah,2
  207.         int     doscall        ;through BIOS
  208.         dec    ch        ;done 4 digits yet
  209.         jnz    rotate    ;not yet
  210.  
  211.          
  212.         ret        ;return to main program
  213.  
  214.     print    endp            ;end subprocedure
  215.  
  216. ;-----------------------------------------------------------
  217.  
  218. code        ends            ;end of code segment
  219.  
  220. ;***********************************************************
  221.  
  222.         end        start    ;end assembly
  223.  
  224.  
  225.